package band.wukong.practice.springboot.boot.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;

import java.util.*;

/**
 * @author wukong(wukonggg@139.com)
 */
@RestController
@RequestMapping(value="/persons2")
@SpringBootApplication
public class PersonRestfulApplication2 {

    private static final String RESP_SUCCESS = "SUCCESS";

    private static final Map<Long, Person> persons = Collections.synchronizedMap(new HashMap<Long, Person>());


    @RequestMapping(value="/", method= RequestMethod.GET)
    public List<Person> getPersons() {

        // 处理"/persons/"的GET请求，用来获取用户列表
        // 还可以通过@RequestParam从页面中传递参数来进行查询条件或者翻页信息的传递
        return new ArrayList<>(persons.values());
    }

    @RequestMapping(value="/", method=RequestMethod.POST)
    public String postPerson(@ModelAttribute Person person) {

        // 处理"/persons/"的POST请求，用来创建User
        // 除了@ModelAttribute绑定参数之外，还可以通过@RequestParam从页面中传递参数
        persons.put(person.getId(), person);
        return RESP_SUCCESS;
    }

    @RequestMapping(value="/{id}", method=RequestMethod.GET)
    public Person getPerson(@PathVariable Long id) {

        // 处理"/persons/{id}"的GET请求，用来获取url中id值的User信息
        // url中的id可通过@PathVariable绑定到函数的参数中
        return persons.get(id);
    }

    @RequestMapping(value="/{id}", method=RequestMethod.PUT)
    public String putPerson(@PathVariable Long id, @ModelAttribute Person p) {

        // 处理"/persons/{id}"的PUT请求，用来更新Person信息
        Person person = persons.get(id);
        person.setName(p.getName());
        person.setAge(p.getAge());
        persons.put(person.getId(), person);
        return RESP_SUCCESS;
    }

    @RequestMapping(value="/{id}", method=RequestMethod.DELETE)
    public String deletePerson(@PathVariable Long id) {

        // 处理"/persons/{id}"的DELETE请求，用来删除User
        persons.remove(id);
        return RESP_SUCCESS;
    }


    public static void main(String[] args) {
        SpringApplication.run(PersonRestfulApplication.class, args);
    }
}

/*

@Controller：      修饰class，用来创建处理http请求的对象
@RestController：  Spring4之后加入的注解，原来在@Controller中返回json需要@ResponseBody来配合，
                   如果直接用@RestController替代@Controller就不需要再配置@ResponseBody，默认返回json格式。
@RequestMapping：  配置url映射

 */